package com.zsrt.java.day20161223.zzm.demo09;

import org.junit.Test;

public class KongLingXing {

	/**
	 *     *
	 *    * *
	 *   *   *
	 *  *     *
	 *   *   *
	 *    * *
	 *     *
	 *     理解:
	 *     1、先得到实心的上半部分:
	 *       行数   左边空格  星星数  
	 *        1     3    1
	 *        2     2    3
	 *        3     1    5
	 *        4     0    7
	 *       结论:星星数=2*行数-1
	 *           左边空格数=4-行数
	 *      2、得到实心的上半部分后  如图所示    
	 *      *         *        
	 *     ***   →   * *        1）、除了第一行,每行只有两个星星
	 *    *****     *   *       2）、从第二行起,两个星星分别位于每行的开头和结尾，其他镂空,可以使用if-else语句
	 *   *******   *     *     
	 *   
	 *      3、先得到实心的下半部分:
	 *               行数   星星数  左边空格数        
	 *    *****       1    5     1
	 *     ***        2    3     2         
	 *      *         3    1     3
	 *      
	 *      结论:星星数=-2*行数+7
	 *          左边空格数=行数
	 *          
	 *          
	 *       4、得到下半部分的 实心后：
	 *    *****     *   *
	 *     ***   →   * *          
	 *      *         *
	 *      
	 *      结论:每行的开头和结尾都是星星,其他镂空;
	 */
	
	@Test
	public void aa(){
		for(int i=1;i<=4;i++){
		    for(int k=1;k<=4-i;k++){
		    	System.out.print(" ");
		    }
			for(int j=1;j<=2*i-1;j++){
				if(j==1||j==2*i-1){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
		
		for(int i=1;i<=3;i++){
			for(int k=1;k<=i;k++){
				System.out.print(" ");
			}
			for(int j=1;j<=-2*i+7;j++){
				if(j==1||j==-2*i+7){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
	
	/**
	 * 方法二：比较笨
	 * 1、先得到实心菱形的上半部分
	 * 
	 *       行数   左边空格  星星数  
	 *        1     3    1          *            *     
	 *        2     2    3         ***     →    * *      结论：第二行的第二个星星，第三行的第二个星星到第四个星星
	 *        3     1    5        *****        *   *          第四行的第二个星星到第六个星星镂空，用&&和||即可得出
	 *        4     0    7       *******      *     *         镂空部分
	 *       结论:星星数=2*行数-1
	 *           左边空格数=4-行数
	 *           
	 * 2、得到实心菱形的下半部分
	 *               行数   星星数  左边空格数          
	 *    *****       1    5     1
	 *     ***        2    3     2         
	 *      *         3    1     3
	 *      
	 *       结论:星星数=-2*行数+7
	 *          左边空格数=行数
	 *          
	 *      *****     *   *  
	 *       ***   →   * *          
	 *        *         *
	 *        
	 *        结论:第一行的第二个星星到第四个星星,第二行的第二个星星镂空，可以使用&&和||结局
	 *    
	 */
	@Test
	public void bb(){
		for(int i=1;i<=4;i++){
		    for(int k=1;k<=4-i;k++){
		    	System.out.print(" ");
		    }
			for(int j=1;j<=2*i-1;j++){
				if((i==2&&j==2)||(i==3&&j==2)||(i==3&&j==3)||(i==3&&j==4)||(i==4&&j==2)||(i==4&&j==3)||(i==4&&j==4)||(i==4&&j==5)||(i==4&&j==6)){
					System.out.print(" ");
				}
				else{
					System.out.print("*");
				}
			}
			System.out.println();
		}
		for(int a=1;a<=3;a++){
			for(int c=1;c<=a;c++){
				System.out.print(" ");
			}
			for(int b=1;b<=-2*a+7;b++){
				if((a==1&&b==2)||(a==1&&b==3)||(a==1&&b==4)||(a==2&&b==2)){
					System.out.print(" ");
				}else{
					System.out.print("*");
				}
				
			}
			System.out.println();
		}
	}
}
